package fuzz

import (
	"errors"
	"fmt"
	"unicode/utf8"
)

// 此函数用于将一个字符串反转
func Reverse(s string) (string, error) {

	if !utf8.ValidString(s) {
		return s, errors.New("input is not valid UTF-8")
	}
	//b := []byte(s)  //此函数为将string转化为byte[]         s2 := string(b)则是再次转换过来。
	//这个函数有问题，因为是一个一个字节反转，那么如果是中文的话，翻转过来就出错了，所以我们用下面的函数。
	r := []rune(s) //遍历rune instand of 遍历byte
	for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
		r[i], r[j] = r[j], r[i]
	}
	return string(r), nil
}

func DoRe() {
	input := "The quick brown fox jumped over the lazy dog"
	rev, revErr := Reverse(input)
	doubleRev, doubleRevErr := Reverse(rev)
	fmt.Printf("original: %q\n", input)
	fmt.Printf("reversed: %q, err: %v\n", rev, revErr)
	fmt.Printf("reversed again: %q, err: %v\n", doubleRev, doubleRevErr)
}
